package com.kun.peng.system.mapper;

import com.kun.peng.mybatis.base.MyBaseMapper;
import com.kun.peng.system.domain.Menu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

/**
 * Created on 2021/11/17.
 *
 * @author xuebaopeng
 * Description
 */
@Mapper
public interface MenuMapper extends MyBaseMapper<Menu> {
    /**
     * 根据菜单标题查询
     * @param title 菜单标题
     * @return
     */
//    @Select("select * from sys_menu where title= #{title}")
    Menu findByTitle(@Param("title")String title);

    /**
     * 通过组件名称查询
     * @param componentName
     * @return
     */
//    @Select("select * from sys_menu where name= #{componentName}")
    Menu findByComponentName(@Param("componentName")String componentName);

    /**
     * 获取节点数量
     * @param id
     * @return
     */
    @Select("select count(*) from sys_menu where menu_id= #{id}")
    int countByPid(@Param("id")Long id);

    /**
     * 更新节点数目
     * @param count
     * @param menuId
     */
    @Update(value = " update sys_menu set sub_count = #{count} where menu_id = #{menuId} ")
    void updateSubCntById(@Param("count")int count, @Param("menuId")Long menuId);


    /**
     * 根据角色ID与菜单类型查询菜单
     * @param roleIds roleIDs
     * @param type 类型
     * @return
     */
    LinkedHashSet<Menu> findByRoleIdsAndTypeNot(@Param("roleIds")Set<Long> roleIds, @Param("type")int type);

    /**
     * 根据菜单的 PID 查询
     * @param pid
     * @return
     */
    List<Menu> findByPid(long pid);

    /**
     * 查询顶级菜单
     * @return
     */
    List<Menu> findByPidIsNull();

    Set<Menu> selectMenusByRoleId(@Param("roleId")Long roleId);
}
